A computing device has limited resources—such as processor bandwidth, communication bandwidth, memory, etc.—that must be allocated among multiple processes or threads that are executed by the computing device. A resource allocation process designed to allocate computing device resources must take several factors into account to determine which processes or threads receive which resources. The most efficient use of computing device resources is desired to maximize overall efficiency of a computing device, with regard to factors such as job throughput, CPU usage, etc.